home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / MNetsrc.hqx / Mac TCP_IP Source v.33 / tcpdump.c < prev    next >
C/C++ Source or Header  |  1989-02-22  |  2KB  |  89 lines

  1. #include <stdio.h>
  2. #include "global.h"
  3. #include "mbuf.h"
  4. #include "netuser.h"
  5. #include "internet.h"
  6. #include "timer.h"
  7. #include "tcp.h"
  8. #include "trace.h"
  9.  
  10. #ifdef MAC
  11.     extern int tcptrcflg;
  12.     extern FILE *trcwndp;
  13. #endif
  14.  
  15. /* TCP segment header flags */
  16. char *tcpflags[] = {
  17.     "FIN",    /* 0x01 */
  18.     "SYN",    /* 0x02 */
  19.     "RST",    /* 0x04 */
  20.     "PSH",    /* 0x08 */
  21.     "ACK",    /* 0x10 */
  22.     "URG"    /* 0x20 */
  23. };
  24.  
  25. /* Dump a TCP segment header. Assumed to be in network byte order */
  26. void
  27. tcp_dump(bpp,source,dest,check)
  28. struct mbuf **bpp;
  29. int32 source,dest;    /* IP source and dest addresses */
  30. int check;        /* 0 if checksum test is to be bypassed */
  31. {
  32.     int i;
  33.     struct tcp seg;
  34.     struct pseudo_header ph;
  35.     int16 csum;
  36.  
  37.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  38.         return;
  39.  
  40.     /* Verify checksum */
  41.     ph.source = source;
  42.     ph.dest = dest;
  43.     ph.protocol = TCP_PTCL;
  44.     ph.length = len_mbuf(*bpp);
  45.     csum = cksum(&ph,*bpp,ph.length);
  46.  
  47.     ntohtcp(&seg,bpp);
  48.  
  49. #ifdef MAC
  50.     fprintf(trcwndp,"TCP: %u->%u Seq x%lx",seg.source,seg.dest,seg.seq,seg.ack);
  51.     if(seg.flags & ACK)
  52.         fprintf(trcwndp," Ack x%lx",seg.ack);
  53.     for(i=0;i<6;i++){
  54.         if(seg.flags & 1 << i){
  55.             fprintf(trcwndp," %s",tcpflags[i]);
  56.         }
  57.     }
  58.     fprintf(trcwndp," Wnd %u",seg.wnd);
  59.     if(seg.flags & URG)
  60.         fprintf(trcwndp," UP x%x",seg.up);
  61.     /* Print options, if any */
  62.     if(seg.mss != 0)
  63.         fprintf(trcwndp," MSS %u",seg.mss);
  64.     if(check && csum != 0)
  65.         fprintf(trcwndp," CHECKSUM ERROR (%u)",i);
  66.     fprintf(trcwndp,"\n");
  67. #else
  68.     printf("TCP: %u->%u Seq x%lx",seg.source,seg.dest,seg.seq,seg.ack);
  69.     if(seg.flags & ACK)
  70.         printf(" Ack x%lx",seg.ack);
  71.     for(i=0;i<6;i++){
  72.         if(seg.flags & 1 << i){
  73.             printf(" %s",tcpflags[i]);
  74.         }
  75.     }
  76.     printf(" Wnd %u",seg.wnd);
  77.     if(seg.flags & URG)
  78.         printf(" UP x%x",seg.up);
  79.     /* Print options, if any */
  80.     if(seg.mss != 0)
  81.         printf(" MSS %u",seg.mss);
  82.     if(check && csum != 0)
  83.         printf(" CHECKSUM ERROR (%u)",i);
  84.     printf("\n");
  85. #endif
  86. }
  87.  
  88.  
  89.